年度归档:2018年

Tomcat生产优化

1 建立JNDI;打开$TOMCAT_HOME/conf/context.xml,添加如下

<!--MySQL-->
    <Resource 
           name="jdbc/market" 
           auth="Container" 
           type="javax.sql.DataSource"
           maxActive="100" 
           maxIdle="30" 
           maxWait="10000"
           username="develop" 
           password="xxxxxx" 
           driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://mysql:3306/market"
    />

<!--SQL Server-->

    <Resource 
           name="jdbc/market" 
           auth="Container" 
           type="javax.sql.DataSource"
           maxActive="100" 
           maxIdle="30" 
           maxWait="10000"
           username="sa" 
           password="xxxxxx" 
           driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
           url="jdbc:sqlserver://sqlserver:1433;DatabaseName=market"
    />

2 优化连接数及压缩选项;打开$TOMCAT_HOME/conf/server.xml,替换如下代码:

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"
               maxThreads="250" maxHttpHeaderSize="8192"
               disableUploadTimeout="true"
               acceptCount="440" emptySessionPath="true"
               enableLookups="false"
               compression="500" compressableMimeType="text/html,text/xml,text/plain,application/octet-stream"/>

3 优化JVM;打开$TOMCAT_HOME/bin/catalina.cmd(catalina.sh),在最上面添加如下

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms2048m -Xmx2048m
-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m
-XX:MaxPermSize=512m -XX:+DisableExplicitGC"

4 修改Spring的连接,打开applicationContext.xml,修改如下:

<jee:jndi-lookup jndi-name="jdbc/market" id="dataSource"></jee:jndi-lookup>

如何下载受限资源

1 通过Chrome的network查找到加载的资源,如 http://cache.gensee.com/gsgetrecord/record14.gensee.net/gsrecord/115291/sbr/2018_05_06/V4AFs46eBy_1525568216/3976114433_145.swf

2 尝试通过本地的html页面将单张集成起来,但swf有其特殊性集成失败

3 换个思路,切换到移动版本(现在的手机不支持flash),以同样的方法可以找到图片资源地址,如 http://cache.gensee.com/gsgetrecord/record19.gensee.net/gsrecord/115291/sbr/2018_05_05/V4AFs46eBy_1525499873/hls/3976114433_96.png

4 多找两张看看其规律 http://cache.gensee.com/gsgetrecord/record19.gensee.net/gsrecord/115291/sbr/2018_05_05/V4AFs46eBy_1525499873/hls/3976114433_97.png

5 按照规律写脚本,如下:

   var data = [];
    data.push({
        name:'冲刺1', 
        url:'http://cache.gensee.com/gsgetrecord/record20.gensee.net/gsrecord/115291/sbr/2018_05_05/V4AFs46eBy_1525481655/hls/3976114433_{0}.png',
        end: 95
    },{
        name:'冲刺2', 
        url:'http://cache.gensee.com/gsgetrecord/record19.gensee.net/gsrecord/115291/sbr/2018_05_05/V4AFs46eBy_1525499873/hls/3976114433_{0}.png',
        start: 96,
        end: 144
    },{
        name:'冲刺3', 
        url:'http://cache.gensee.com/gsgetrecord/record14.gensee.net/gsrecord/115291/sbr/2018_05_06/V4AFs46eBy_1525568216/hls/3976114433_{0}.png',
        start: 145,
        end: 202
    },{
        name:'冲刺4', 
        url:'http://cache.gensee.com/gsgetrecord/record20.gensee.net/gsrecord/115291/sbr/2018_05_06/V4AFs46eBy_1525586183/hls/3976114433_{0}.png',
        start: 203,
        end: 344
    });

6 将上述页面生成 html

   var b = 0;
    if(qs && qs['b']){
        b = qs['b'] * 1;
    } else {
        document.title = '系分考试';
        $('content').innerHTML = html;
        return;
    }
    
    
    
    var url = data[b].url;
    var start = data[b].start;
    if(!start){
        start = 0;
    }
    var end = data[b].end;
    var name = data[b].name;
    document.title = '系分考试-' + name;
    
    
    
    

    html += '\n\n';
    for(var i = start;i<=end;i++){
    
        html += '\n\n';
        
        html += '![{0}]({0}) '.format(url.format(i));
        
    }
    console.log(html);
    $('content').innerHTML = html;

7 通过浏览器打印生成pdf

8 完整代码

<!DOCTYPE html>
<html>
<title></title>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
<link rel="apple-touch-icon" href="images/task/task3.png">
<xmp theme="simplex" style="display:none;" id="content">

</xmp>
<script src="js/tohours.min.js"></script>
<script>
(function(){


    var data = [];
    data.push({
        name:'冲刺1', 
        url:'http://cache.gensee.com/gsgetrecord/record20.gensee.net/gsrecord/115291/sbr/2018_05_05/V4AFs46eBy_1525481655/hls/3976114433_{0}.png',
        end: 95
    },{
        name:'冲刺2', 
        url:'http://cache.gensee.com/gsgetrecord/record19.gensee.net/gsrecord/115291/sbr/2018_05_05/V4AFs46eBy_1525499873/hls/3976114433_{0}.png',
        start: 96,
        end: 144
    },{
        name:'冲刺3', 
        url:'http://cache.gensee.com/gsgetrecord/record14.gensee.net/gsrecord/115291/sbr/2018_05_06/V4AFs46eBy_1525568216/hls/3976114433_{0}.png',
        start: 145,
        end: 202
    },{
        name:'冲刺4', 
        url:'http://cache.gensee.com/gsgetrecord/record20.gensee.net/gsrecord/115291/sbr/2018_05_06/V4AFs46eBy_1525586183/hls/3976114433_{0}.png',
        start: 203,
        end: 344
    });
    
    var $ = function(id){
        return document.getElementById(id);
    }
    
    var html = '';
    for(var i=0;i<data.length;i++){
        if(i%3 == 0){
            html += '\n\n';
        }
        html += '[【{0}】](cc-xf?b={1}) '.format(data[i].name, i);
    }
    html += '\n\n';
    
    html += '<a href="javascript:;" onclick="hideLink()">【关闭】</a> [【首页】](cc-xf)';
    
    
    qs = tohours.queryString();
    var b = 0;
    if(qs && qs['b']){
        b = qs['b'] * 1;
    } else {
        document.title = '系分考试';
        $('content').innerHTML = html;
        return;
    }
    
    
    
    var url = data[b].url;
    var start = data[b].start;
    if(!start){
        start = 0;
    }
    var end = data[b].end;
    var name = data[b].name;
    document.title = '系分考试-' + name;
    
    
    
    

    html += '\n\n';
    for(var i = start;i<=end;i++){
    
        html += '\n\n';
        
        html += '![{0}]({0}) '.format(url.format(i));
        
    }
    console.log(html);
    $('content').innerHTML = html;
})();

function hideLink(){
    var a = document.getElementsByTagName('a');
    for(var i=0;i<a.length;i++){
        a[i].style = 'display:none';
    }
}
</script>
<script src="js/strapdown.js"></script>
</html>

如何导出未加密的Kindle书籍使用其他阅读软件打开

由于Kindle软件里面有很多不方便的地方,有时候需要导出自己购买的电子书到其他读书软件里面阅读,或者需要将书籍统一保存,借助于ePUBee Magic可以实现这个目的

1 需要在Kindle的设置查到文件保存的路径

2 打开你的Kindle,下载你已经购买的书

3 打开第一步查询到的目录,按时间倒序,找到最新下载的。打开对应目录,找到以.azw结尾的文件,这是我们要脱壳的文件

4 打开ePUBee Magic选择脱壳并生成EPUB,然后打开你刚刚找到的.azw文件,这个时候ePUBee Magic会上传一个key文件,有时候杀毒软件会有提醒,点击确定就可以了。

5 云端脱壳完成后,会显示下载的按钮,点击下载就能保存到默认的下载目录

6 然后通过AirDrop传递到iPhone对应的软件就可以了

总结:无法得知ePUBee Magic这个软件是否绝对安全,另外这个软件对于大于50M的文件是不能上传转换的,像丘吉尔的二战史就是一个大部头,无法在上面脱壳,还是有一些局限性

换驾照

第一次给政府的服务点个赞

换驾照这件事情其实一辈子也没有几次,正因为频次比较少,所以网上的相关资料非常少。因为听说换驾照还需要体检,还要重新制证,总觉得不是那么容易可以搞定的事情。但今天我先说我的结论:半小时不到从拍照,体检,交钱,拿证。

第一次体验到了政府办事的效率,如果你说来换驾照的人是不是很少啊,当然不是,主要的原因是每个窗口的效率都极高,如果你没有扣分的情况,整个流程下来,虽然有排队的现象,但非常迅速的就可以完成。

换驾照的第一关是拍照,你需要现场交25块钱,拍6张照片,其中会用掉4张;拍照的只有一个阿姨,但效率极高,一次两个,打印表格,贴照片签名,核对信息几乎一刻不停,前面5-6个人的时候基本上3-5分钟就完成了,非常高效。

第二关是体检,需要填写一个表格,同样是一位业务熟练的阿姨,一次指挥三个人填写,指出关键易错的地方,非常给力。换驾照的体检主要是两个方面,一个是色盲的检测;第二个是视力的检测;想当初自己考驾照时,需要的臂力测试就省略了,医生只要没看到你断手断脚的都会给个合格通过。

接下来就是拿着体检合格报告去换照的窗口核对信息,核对信息的工作人员非常的认真,表格上的地址和身份证号一定要跟身份证上的完全一致。核对无误后,就会交给下一个窗口制证!现场制证,一人大约需要两分钟的时间就可以把新的驾照拿到了!

整个流程走下来,加上我回车上拿眼晴的时间,一共不到半小时,10年期的驾照就拿到了!

上面是整个流程,这也从另外一个侧面反映了为什么网上很少这类的信息存在,因为你换驾照基本上不会遇到什么问题,只需要就近找一个驾驶员办事窗口就行了,一条龙服务。由于大家第一次换照的时候都很担心,因为网上会写有些地方体检和换照的地方是分开的,比如有些地方指定了体检的医院,在医院里面体检完之后肯定没办法及时拿到新的驾照。在选择的时候还是要选择这种驾驶员服务窗口,体检和换照在一起的,会省不少时间。

总共的费用大概是90元,25块拍照费,50块体检费,10块证件费,还有5块停车费。